#include<iostream>
#include<stack>
#include<map>

using namespace std;
bool isValid(string str) {
    map<char, char> mem;
    // 这个地方刚开始的地方错了，很愚蠢，不要搞反了，是根据右半括号匹配前面的括号
    mem[')'] = '(';
    mem[']'] = '[';
    mem['}'] = '{';

    stack<char> stk;
    for (int i = 0; i < str.size(); i++) {
        if (!stk.empty() && stk.top() == mem[str[i]]) {
            stk.pop();
        } else {
            stk.push(str[i]);
        }
    }
    return stk.empty();
}
int main() {
    string str = "(])";
    map<char, char> mem;
    mem[')'] = '(';
    mem[']'] = '[';
    mem['}'] = '{';

    stack<char> stk;
    // int idx = str.size();
    for (int i = 0; i < str.size(); i++) {
        // 
        if (!stk.empty() && stk.top() == mem[str[i]]) {
            cout << "-----" << endl;
            stk.pop();
        } else {
            stk.push(str[i]);
        }

        // cout << stk.top() << endl;
    }
    if (stk.empty()) {
        cout << "true" << endl;
    } else {
        cout << "false" << endl;
    }

}